package com.xinbochuang.machine.admin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xinbochuang.machine.admin.domain.Macinout;
import com.xinbochuang.machine.admin.domain.MacinoutAssociation;
import com.xinbochuang.machine.admin.domain.Worker;
import com.xinbochuang.machine.admin.domain.macRoom.MacRoom;
import com.xinbochuang.machine.admin.domain.system.SysDept;
import com.xinbochuang.machine.admin.domain.system.SysUser;
import com.xinbochuang.machine.admin.dto.MacInOutDto;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @author 杜文博
 * @date 2020-10-14
 */
public interface IMacinoutService extends IService<Macinout> {

    IPage<Macinout> findMacRoomByNameForPage(Macinout macinout);

    IPage<Macinout> getCheckMacInoutList(Macinout macinout);

    Integer getMacinoutForCheckCount(Macinout macinout);

    /**
     * 新增机房出入申请
     */
    boolean insertMacinout(MacInOutDto macinoutDto);

    /**
     * 修改机房出入申请
     */
    boolean updateMacinout(MacInOutDto macinoutDto);

    /**
     * 删除机房出入申请
     */
    boolean deleteMacinout(String uuids);

    /**
     * 根据UUID查询机房出入单详情
     */
    MacInOutDto getMacinoutById(String uuid);

    /**
     * 根据UUID查询机房施工人员
     */
    List<String> getWorkderIds(String macInoutId);

    /**
     * 根据进出单Id查询施工人员列表
     *
     * @param macInoutId
     * @return
     */
    List<Worker> getWorkerList(String macInoutId);

    /**
     * 根据进出单Id查询施工机房列表
     *
     * @param macInoutId
     * @return
     */
    List<MacinoutAssociation> getMacList(String macInoutId);

    MacInOutDto getCheckDetail(String macInoutId);

    int checkMacInout(Macinout macInout);

    /**
     * 根据当前登录人UserId查询当前登录人部门
     */
    SysDept getDeptByUserId(String userId);

    /**
     * 获取自有人员列表
     */
    List<SysUser> getOwnner(String deptId);

    /**
     * 获取自有部门
     */
    List<SysDept> treeselectFreeWorkerDept(SysDept sysDept);

    /**
     * 获取三方部门
     */
    List<SysDept> owerThirdTreeList(SysDept sysDept);
    /**
     * 获取当前登录人所在部门
     */
    SysDept getCurrentUserDept();

    /**
     * 获取当前登录人信息
     */
    SysUser getCurrentUser();

    /**
     * 建单文件上传
     */
    String uploadFile(MultipartFile file) throws IOException;

    /**
     * 现场负责人远程搜索
     */
    List<SysUser> selectWorkIngPrincpcipal(String workIngPrincpcipal);

    /**
     * 施工机房远程搜索
     */
    List<MacRoom> selectMacRoom(String macRoom);

    /**
     * 根据部门I查询施工人员
     */
    List<SysUser> getWorker(String deptId);

    IPage<Macinout> findMacRoomByNameForPageApp(Macinout macinout);

    boolean approveMacinoutByApp(Macinout macInOutDto);

    IPage<Map<String, Object>> getWaitAcceptList(String queryOrderStatus,String userid, int pageNum, int pageSize);
    IPage<Map<String, Object>> getWaitAcceptListWeb(String queryOrderStatus,String userid, int pageNum, int pageSize);

    /**
     * 查询导出列表
     *
     * @param macinout 查询条件
     * @return 结果
     */
    List<Macinout> selectExportList(Macinout macinout);
}
